Quantifying pandemic spread and public health interventions during three global pandemics in Switzerland 1889, 1918 and 2020
Research question
- Are patterns of pandemic spread, its determinants, and effects of public health interventions are similar across pandemics in Switzerland?
- Estimate excess mortality for pandemics in 1890, 1918 and 2020 per district, age groups and sex
- Comparing of spatial pattern between the pandemics
- Investigate the determinants of spread in the context of different co-factors ( Urbanization, GIP per capita etc.)
Data
Historical data
- Collected and digitalized from Kaspar Staub’s team
- Pandemic 1890 (Russian flu): Data from 1879 - 1895
- Pandemic 1918 (Spanish flu): Data from 1908 - 1925
- Mortality data for each year, district, age group and sex
- Population data for census of 1880, 1888, 1900, 1910, 1920 for all districts
- Population data for sex and age group only for year census 1888 and 1910
- Years between were interpolated
Covid 19
- Death and population data from 2014 - 2020 for each district, sex and age group
Methods
Bayesian approach
INLA (Bayesian inference for Latent Gaussian Models)
Death data for \(130\) districts of Switzerland for all three pandemics (1890, 1918, 2020)
Data \(Y\) is given as the total number of death in fixed areas and in each year
Standard Poisson likelihood to model the counts \[ y_i \mid \eta_i\sim Po\left(E_i \exp(\eta_i)\right),\] where \(E_i\) is the ``population at risk’’ in region \(i\).
classical disease mapping model; BYM model (Besag, York and Mollie proposed it)
The log relative risk, \(\bf{\eta} = (\eta_1, \dots, \eta_n)^T\), is thus decomposed into \[\bf{\eta} = \mu + \bf{u} + \bf{v} \]
- \(\mu\) is the overall intercept
- \(\bf{u}\) is a random effect with spatial structure following the Besag model
- \(\bf{v}\) represents a non-spatial overdispersion
\({\bf u}\) is “besag” modelled spatially structured with smoothing parameter \(\kappa_u\).
\({\bf v}\) is unstructured with precision parameter \(\kappa_v\), i.e. \(\bf{v} \sim \mathcal{N}(0, \kappa_v^{-1}I)\).
The precision terms \(\kappa_v\) and \(\kappa_u\) are assigned the default gamma prior distributions of INLA \[ \begin{aligned} \kappa_u & \sim \textrm{Gamma}( \alpha_u, \beta_u ), \\ \kappa_v & \sim \textrm{Gamma}( \alpha_v, \beta_v ). \end{aligned} \]
The default values are \(\alpha_u = \alpha_v = 1\) and \(\beta_u = \beta_v = 0.00005\).
Year is modelled using independent and identically (iid) Gaussian prior distribution with \({N}(0, \tau_v^{-1})\)
Calculation of expected values based on the mortality trend of the previous 4 years (1890 only 4 years possible)
formula =
death ~ 1 + offset(log(population)) +
f(Region, model="bmy", graph="Bezirk_Inla", scale.model = TRUE)+
f(Year, model='iid', constr = TRUE)
inla.mod = inla(formula,
data=reg_data,
family="Poisson",
verbose = TRUE,
control.compute=list(config = TRUE),
control.mode=list(restart=T),
num.threads = round(parallel::detectCores()*.8),
control.predictor=list(compute=T))
- 1000 samples from the posterior distribution
- Calculation of median and 95% CrI(Credible interval) of the 1000 samples
- Excess mortality = observed death counts – expected death counts
Results
Maps
Year
Sex
Because excess death is different in each pandemic year, and to better compare sex per pandemic year, the divisions of relative excess death per year are different. In 1890 no significant differences between sex, 1918 and 2020 higher excess mortality in men compared to women.
## [[1]]
##
## Call:
## lm(formula = excess_percentage ~ sex, data = data_excess[data_excess$Year ==
## 1890, ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -54.937 -7.035 -0.735 7.800 67.043
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.8799 1.1939 2.412 0.0166 *
## sexm -0.8326 1.6884 -0.493 0.6223
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 13.45 on 252 degrees of freedom
## Multiple R-squared: 0.0009641, Adjusted R-squared: -0.003
## F-statistic: 0.2432 on 1 and 252 DF, p-value: 0.6223
## [[1]]
##
## Call:
## lm(formula = excess_percentage ~ sex, data = data_excess[data_excess$Year ==
## 1918, ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -106.539 -12.289 -3.094 9.296 92.898
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 39.262 2.158 18.192 < 2e-16 ***
## sexm 9.637 3.052 3.157 0.00178 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 24.61 on 258 degrees of freedom
## Multiple R-squared: 0.0372, Adjusted R-squared: 0.03347
## F-statistic: 9.969 on 1 and 258 DF, p-value: 0.001781
## [[1]]
##
## Call:
## lm(formula = excess_percentage ~ sex, data = data_excess[data_excess$Year ==
## 2020, ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -37.626 -9.653 -1.992 7.499 50.322
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11.186 1.250 8.948 < 2e-16 ***
## sexm 5.133 1.768 2.903 0.00402 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 14.2 on 256 degrees of freedom
## Multiple R-squared: 0.03187, Adjusted R-squared: 0.02809
## F-statistic: 8.429 on 1 and 256 DF, p-value: 0.004016
Age
Because excess death is different in each pandemic year, and to better compare age groups per pandemic year, the divisions of relative excess death per year are different. Since the highest excess death in the 1918 pandemic was between 20 - 39 years, we further divided the age groups from 0-69 years into 3 additional groups for the 1918 pandemic. In the other pandemic years, this is not possible due to low death rates in the younger age groups.
In 1890 no significant differences in excess mortality between age age groups. 1918 higher excess mortality for age group 0-69 years compared to > 70 years, in 2020 lower excess mortality for age group 0-69 years compared to < 70 years.
## [[1]]
##
## Call:
## lm(formula = excess_percentage ~ age_group.y, data = data_excess[data_excess$Year ==
## 1890, ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -44.418 -7.326 -0.580 7.081 79.042
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.892 1.344 2.895 0.00412 **
## age_group.y0_69 -1.674 1.901 -0.881 0.37928
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 15.15 on 252 degrees of freedom
## Multiple R-squared: 0.003069, Adjusted R-squared: -0.0008871
## F-statistic: 0.7758 on 1 and 252 DF, p-value: 0.3793
## [[1]]
##
## Call:
## lm(formula = excess_percentage ~ age_group.y, data = data_excess[data_excess$Year ==
## 1918, ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -51.142 -11.508 -1.007 10.168 100.078
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.063 1.854 2.732 0.00673 **
## age_group.y0_69 54.798 2.621 20.905 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21.13 on 258 degrees of freedom
## Multiple R-squared: 0.6288, Adjusted R-squared: 0.6273
## F-statistic: 437 on 1 and 258 DF, p-value: < 2.2e-16
## [[1]]
##
## Call:
## lm(formula = excess_percentage ~ age_group.y, data = data_excess[data_excess$Year ==
## 2020, ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -48.422 -10.131 -0.849 8.402 57.224
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 12.616 1.378 9.152 < 2e-16 ***
## age_group.y0_69 -10.223 1.949 -5.244 3.29e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 15.66 on 256 degrees of freedom
## Multiple R-squared: 0.09701, Adjusted R-squared: 0.09348
## F-statistic: 27.5 on 1 and 256 DF, p-value: 3.288e-07
1918 Age groups 0-19, 20-39 and 40-69 show higher excess mortality compared to >70 years. The highest excess mortality shows the age group 0-69.
##
## Call:
## lm(formula = excess_percentage ~ age_group, data = data_excess)
##
## Residuals:
## Min 1Q Median 3Q Max
## -159.50 -17.16 -1.03 13.32 282.52
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.063 3.843 1.317 0.188280
## age_group0_19 30.890 5.435 5.683 2.22e-08 ***
## age_group20_39 226.383 5.435 41.649 < 2e-16 ***
## age_group40_69 20.035 5.435 3.686 0.000252 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 43.82 on 516 degrees of freedom
## Multiple R-squared: 0.8141, Adjusted R-squared: 0.813
## F-statistic: 753.2 on 3 and 516 DF, p-value: < 2.2e-16
Age and Sex
Because excess death is different in each pandemic year, and to better compare age groups per pandemic year, the divisions of relative excess death per year are different. Since the highest excess death in the 1918 pandemic was between 20 - 39 years, we further divided the age groups from 0-69 years into 3 additional groups for the 1918 pandemic. In the other pandemic years, this is not possible due to low death rates in the younger age groups.
1918 - Age 20 - 39
The relative mortality rate is above 14% for both sexes in the 20-39 age group, but even higher for men than for women.
##
## Call:
## lm(formula = excess_percentage ~ sex, data = data_excess)
##
## Residuals:
## Min 1Q Median 3Q Max
## -220.47 -107.90 -16.87 96.29 300.85
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 99.149 7.782 12.740 < 2e-16 ***
## sexm 48.530 11.006 4.409 1.26e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 125.5 on 518 degrees of freedom
## Multiple R-squared: 0.03618, Adjusted R-squared: 0.03432
## F-statistic: 19.44 on 1 and 518 DF, p-value: 1.261e-05
Co-factors
GDP per capita
GDP per capita was taken from 1888 for 1890, 1910 for 1918, 2008 for 2020.
Number of hospitals
Proportion of children aged 5-14
Proportion of child mortality
Child mortality was taken from the year before the pandamic